#include <SoftwareSerial.h>
#include <AFMotor.h>
AF_DCMotor motor_L(1); // 모터드라이버 L293D 1: M1에 연결, 4: M4에 연결
AF_DCMotor motor_R(4);
int trigPin = 9;
int echoPin = 10;
void setup() {
Serial.begin(9600); // PC와의 시리얼 통신속도
Serial.println("Eduino Smart Car Start!");
// turn on motor
motor_L.setSpeed(180); // 왼쪽 모터의 속도
motor_L.run(RELEASE);
motor_R.setSpeed(180); // 오른쪽 모터의 속도
motor_R.run(RELEASE);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
int val1 = digitalRead(A0); // 라인센서1
int val2 = digitalRead(A5); // 라인센서2
long duration, distance; // 각 변수를 선언합니다.
digitalWrite(trigPin, LOW); // trigPin에 LOW를 출력하고
delayMicroseconds(2); // 2 마이크로초가 지나면
digitalWrite(trigPin, HIGH); // trigPin에 HIGH를 출력합니다.
delayMicroseconds(10); // trigPin을 10마이크로초 동안 기다렸다가
digitalWrite(trigPin, LOW); // trigPin에 LOW를 출력합니다.
duration = pulseIn(echoPin, HIGH); // echoPin핀에서 펄스값을 받아옵니다.
distance = duration * 17 / 1000; // duration을 연산하여 센싱한 거리값을 distance에 저장합니다.
Serial.println(distance);
if (distance > 15){
if (val1 == 0 && val2 == 0) { // 직진
motor_L.run(FORWARD);
motor_R.run(FORWARD);
}
else if (val1 == 0 && val2 == 1) { // 우회전
motor_L.run(FORWARD);
motor_R.run(RELEASE);
}
else if (val1 == 1 && val2 == 0) { // 좌회전
motor_L.run(RELEASE);
motor_R.run(FORWARD);
}
else if (val1 == 1 && val2 == 1) { // 좌회전
motor_L.run(RELEASE);
motor_R.run(RELEASE);
}
}
else{ // 정지
motor_L.run(RELEASE);
motor_R.run(RELEASE);
}
}
해당 소스는 기존 소스와 밑에있는 보내주신 초음파 설정 소스를 합쳐서 실행한 코드입니다만 동작이 되지 않아 재문의 드립니다.
long duration, distance;
digitalWrite(trigPin, HIGH); // trigPin에서 초음파 발생(echoPin도 HIGH)
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); // echoPin 이 HIGH를 유지한 시간을 저장 한다.
distance = duration * 17 / 1000;
해당 소스를 받았습니다.
전체적인 소스를 질문드립니다.
모터 구동시키려면 전류 많이 먹어서 USB만 연결되어있는 상태에서는 구동되지 않을 수 있어요
저는 9V 1A 어댑터 전원으로 테스트 했습니다
혹시 모터에서 삐삐- 소리 나면서 바퀴가 돌아가지 않으면 전력이 부족하거나 접촉불량이니 점검해보세요